package com.leyou.page.service;

import com.leyou.common.vo.PageResult;
import com.leyou.item.client.ItemClient;
import com.leyou.item.dto.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class PageService {

    @Autowired
    private ItemClient itemClient;

    public Map loadItemData(Long spuId) {
        Map itemDatas = new HashMap();
//        查询spu
        SpuDTO spu = itemClient.findSpuBySpuId(spuId);
//        brand       ： 品牌对象
        Long brandId = spu.getBrandId();
        BrandDTO brand = itemClient.findBrandById(brandId);
        itemDatas.put("brand",brand);
//        spuName     ： 商品名称
        itemDatas.put("spuName",spu.getName());
//        subTitle    ： 商品的子标题
        itemDatas.put("subTitle",spu.getSubTitle());
//        categories  ： 三级分类的对象集合
        List<Long> categoryIds = spu.getCategoryIds();
        List<CategoryDTO> cateogryList = itemClient.findCateogryByCids(categoryIds);
        itemDatas.put("categories",cateogryList);
//        detail      ： 商品详情的对象
        SpuDetailDTO detail = itemClient.findSpuDetailBySpuId(spuId);
        itemDatas.put("detail",detail);
//        skus        ： spu下所有sku的集合
        List<SkuDTO> skuList = itemClient.findSkuDTOListBySpuId(spuId);
        itemDatas.put("skus",skuList);
//        specs       ： 规格组的集合，每个规格组中带有规格参数集合
        Long cid3 = spu.getCid3();
//        根据第三级分类查询规格组
        List<SpecGroupDTO> specGroupList = itemClient.findSpecGroupByCategoryId(cid3);
//        给group集合中的每个对象set params
        specGroupList.forEach(group->{
            List<SpecParamDTO> params = itemClient.findSpecParamByCategoryIdOrGroupId(null, group.getId(), null);
            group.setParams(params);
        });
        itemDatas.put("specs",specGroupList);

        return itemDatas;

    }

    @Autowired
    private TemplateEngine templateEngine;

    public void createHtmlBySpuId(Long spuId){
        Map map = this.loadItemData(spuId);
        Context context = new Context();
        context.setVariables(map); //把数据放入上下文
//        参数说明： p1: 模板名称 ，p2:上下文（数据） p3：静态页面输出的路径
        try(PrintWriter fileWriter = new PrintWriter("D:\\class103\\sorfware\\nginx-1.16.0\\html\\item\\"+spuId+".html")) {
            templateEngine.process("item",context,fileWriter);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public void deleteHtmlBySpuId(Long id) {
        File file = new File("D:\\class103\\sorfware\\nginx-1.16.0\\html\\item\\" + id + ".html");
        if(file.exists()){
            file.delete();
        }
    }
}
